/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Productos;

import com.toedter.calendar.JDateChooser;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;

/**
 *
 * @author alrojas
 */
public final class IAgregar extends JFrame{
    
    private JLabel nombreComercialLab; 
    private JLabel nombreGenericoLab;      
    private JLabel nombreLaboratorioLab;
    private JLabel nombreCategoriaLab;
    private JLabel rucProveedorLab;
    private JLabel presentacionLab;
    private JLabel fechaVencimientoLab;
    private JLabel precioUnitarioLab;
    private JLabel cantidadMinimaLab;
    private JLabel cantidadActualLab;
    
    private JTextField nombreComercialTex; 
    private JTextField nombreGenericoTex;
    private JTextField nombreLaboratorioTex;
    private JComboBox  nombreCategoriaCom; 
    private JTextField rucProveedorTex;
    private JTextField presentacionTex;
    private JDateChooser fechaVencimientoTex;
    private JTextField precioUnitarioTex;
    private JSpinner   cantidadMinimaSpi;
    private JSpinner   cantidadActualSpi;
    private JButton    rucProveedorBut;
    
    private JButton guardarBut;
    private JButton descartarBut;        

    public IAgregar(JFrame padre) throws HeadlessException{
        
        this.setLayout(new GridBagLayout());
        this.setTitle("Nuevo Producto");
        
        inicializarComponentes();
        inicializarListeners(padre);
        
        this.pack();
        this.setLocationRelativeTo(null);
        this.setVisible(true);
        
    }
    
    public void inicializarComponentes(){
        
        GridBagConstraints limites = new GridBagConstraints();
        limites.insets = new Insets(2, 0, 2, 0);
        
        limites.fill = GridBagConstraints.BOTH;
        
        nombreComercialLab = new JLabel("Nombre Comercial: "); 
        limites.gridx = 0; limites.gridy = 0;
        add(nombreComercialLab,limites);
        
        nombreGenericoLab = new JLabel("Nombre Genérico: ");      
        limites.gridy = 1;
        add(nombreGenericoLab,limites);
        
        nombreLaboratorioLab = new JLabel("Laboratorio: ");
        limites.gridy = 2;
        add(nombreLaboratorioLab,limites);
        
        nombreCategoriaLab = new JLabel("Categoría: ");
        limites.gridy = 3;
        add(nombreCategoriaLab,limites);
        
        rucProveedorLab = new JLabel("Proveedor: ");
        limites.gridy = 4;
        add(rucProveedorLab,limites);
        
        presentacionLab = new JLabel("Presentación: ");
        limites.gridy = 5;
        add(presentacionLab,limites);
        
        fechaVencimientoLab = new JLabel("F. Vencimiento: ");
        limites.gridy = 6;
        add(fechaVencimientoLab,limites);
        
        precioUnitarioLab = new JLabel("Precio Unitario: ");
        limites.gridy = 7;
        add(precioUnitarioLab,limites);
        
        cantidadMinimaLab = new JLabel("Stock Mínimo: ");
        limites.gridy = 8;
        add(cantidadMinimaLab,limites);
        
        cantidadActualLab = new JLabel("Stock Actual: ");  
        limites.gridy = 9;
        add(cantidadActualLab,limites);
        
        
        nombreComercialTex = new JTextField(20);
        limites.gridx = 1; limites.gridy = 0;
        add(nombreComercialTex,limites);
        
        nombreGenericoTex = new JTextField(10);      
        limites.gridy = 1;
        add(nombreGenericoTex,limites);
        
        nombreLaboratorioTex = new JTextField(10);
        limites.gridy = 2;
        add(nombreLaboratorioTex,limites);
        
        nombreCategoriaCom = new JComboBox(new String[]{"Agrícola","Fertilizante","Veterinario"});
        limites.gridy = 3;
        add(nombreCategoriaCom,limites);
        
        JPanel panelProveedor = new JPanel(new GridBagLayout());
        rucProveedorTex = new JTextField(20); rucProveedorTex.setEditable(false);
        rucProveedorBut = new JButton(new ImageIcon("figuras/supplier12.png")); rucProveedorBut.setMargin(new Insets(0,2,0,1));
        limites.gridx = 0; limites.gridy = 0; panelProveedor.add(rucProveedorTex,limites); // Limites solo aplican para el Panel Proveedor
        limites.gridx = 1; limites.gridy = 0; panelProveedor.add(rucProveedorBut,limites); // Limites solo aplican para el Panel Proveedor
        limites.gridy = 4; // Limites global
        add(panelProveedor,limites);
   
        presentacionTex = new JTextField(10);
        limites.gridy = 5;
        add(presentacionTex,limites);
        
        fechaVencimientoTex = new JDateChooser(Calendar.getInstance().getTime()); fechaVencimientoTex.setDateFormatString("dd/MM/yyyy");
        limites.gridy = 6;
        add(fechaVencimientoTex,limites);
        
        precioUnitarioTex = new JTextField(10);
        limites.gridy = 7;
        add(precioUnitarioTex,limites);
        
        SpinnerModel modelo1 = new SpinnerNumberModel(1,1,200,1);
        cantidadMinimaSpi = new JSpinner(modelo1); 
        limites.gridy = 8;
        add(cantidadMinimaSpi,limites);
        
        SpinnerModel modelo2 = new SpinnerNumberModel(1,1,200,1);
        cantidadActualSpi = new JSpinner(modelo2    );  
        limites.gridy = 9;
        add(cantidadActualSpi,limites);
    
        JPanel panelBotones = new JPanel(new FlowLayout());
        guardarBut = new JButton("Guardar", new ImageIcon("figuras/save32.png"));
        guardarBut.setHorizontalTextPosition(SwingConstants.CENTER);
        guardarBut.setVerticalTextPosition(SwingConstants.BOTTOM) ;
        guardarBut.setVerticalAlignment(SwingConstants.CENTER);
        descartarBut = new JButton("Descartar", new ImageIcon("figuras/trash32.png"));
        descartarBut.setHorizontalTextPosition(SwingConstants.CENTER);
        descartarBut.setVerticalTextPosition(SwingConstants.BOTTOM) ;
        descartarBut.setVerticalAlignment(SwingConstants.CENTER);
        limites.gridy = 10;
        panelBotones.add(guardarBut); panelBotones.add(descartarBut);
        add(panelBotones,limites);
        
    }
    
    public void inicializarListeners(final JFrame padre){
        
        final Productos.IPrincipal padreReal = (Productos.IPrincipal) padre;
        
        rucProveedorBut.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                new Proveedores.IPrincipal(Productos.IAgregar.this,true);
            }
        });
        
        guardarBut.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    SimpleDateFormat formateador = new SimpleDateFormat("yyyy-MM-dd");
                    //Producto producto = new Producto("", nombreComercialTex.getText(), nombreGenericoTex.getText(), "", "",formateador.format(fechaVencimientoTex.getDate()), 3.0f,1, Integer.parseInt(cantidadMinimaSpi.getValue().toString()));
                    Producto producto = new Producto("", nombreComercialTex.getText(), nombreGenericoTex.getText(), nombreLaboratorioTex.getText(), nombreCategoriaCom.getSelectedItem().toString(), rucProveedorTex.getText(),presentacionTex.getText(), formateador.format(fechaVencimientoTex.getDate()),Float.parseFloat(precioUnitarioTex.getText()), Integer.parseInt(cantidadActualSpi.getValue().toString()), Integer.parseInt(cantidadMinimaSpi.getValue().toString()));
                    boolean resultado = MProducto.agregar(producto);
                    if (resultado == false){
                        JOptionPane.showMessageDialog(null,"Producto agregado correctamente!","Operación Exitosa!",JOptionPane.INFORMATION_MESSAGE);
                        setVisible(false);
                        padreReal.actualizar();
                    }
                } catch (SQLException ex) {
                    Logger.getLogger(IAgregar.class.getName()).log(Level.SEVERE, null, ex);
                } catch (ClassNotFoundException ex) {
                    Logger.getLogger(IAgregar.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        });
        
        descartarBut.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                setVisible(false);
            }
        });
    }
    
    public void actualizarProveedor(String ruc){
        rucProveedorTex.setText(ruc);
    }

}
